#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMenuBar"
#include "QDebug"
#include "QFileDialog"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("打开文本文件");
    //设置整体菜单
    //设置菜单栏
    QMenuBar* menubar=this->menuBar();
    this->setMenuBar(menubar);
    //添加菜单
    QMenu* menu=new QMenu("文件");
    menubar->addMenu(menu);
    //添加菜单项
    QAction* action1=new QAction("打开");
    QAction* action2=new QAction("保存");
    menu->addAction(action1);
    menu->addAction(action2);
    //连接信号槽
    connect(action1,&QAction::triggered,this,&MainWindow::handle1);
    connect(action2,&QAction::triggered,this,&MainWindow::handle2);

    //设置一个输入框，可以输入内容进行保存，也可以读取内容
    edit=new QLineEdit();
    //设置QLineEdit的字体和输入样式（从左上角输入）
    QFont font;
    font.setPixelSize(30);
    edit->setFont(font);
    //设置默认输入为左上角，用|连接
    edit->setAlignment(Qt::AlignLeft|Qt::AlignTop);
    //设置edit的初始提示内容
    edit->setPlaceholderText("请输入内容");
    //将输入设置为MainWindows的中心控件
    this->setCentralWidget(edit);
    this->setWindowTitle("选择打开文件");
}

MainWindow::~MainWindow()
{
    delete ui;
}

//打开
void MainWindow::handle1()
{
    //1、添加 打开文件对话框
    //直接使用QFileDialog中的getOpenFileName，快速创建对话框，它会返回QString类型的路径
    QString path=QFileDialog::getOpenFileName(this,"打开文件","请选择文件");

    //2、将路径显示在下面状态栏
    //已有状态栏就用已有的，没有就新建
    QStatusBar* statusbar=this->statusBar();
    this->setStatusBar(statusbar);
    //设置状态栏内容
    statusbar->showMessage(path);

    //3、打开文件
    //QFile用零时变量就行，根据path路径创建QFile对象
    QFile file(path);
    //打开文件
    //open需要设置打开方式OpenMode，这里设置为仅读
    //根据open()的返回值，判断是否成功打开
    bool Isopen=file.open(QIODevice::ReadOnly);
    if(!Isopen)
    {
        qDebug()<<"打开文件失败";
        return;
    }

    //4、读取文件
    //QByteArray可以直接用QString接收
    //这样只能读取文本文件，不能读取二级制文件
    //因为我们实现的时文本打开、读取，所以可以直接使用QString接收
    QString text=file.readAll();

    //5、关闭文件
    file.close();

    //6、将读取的信息写入LineEdit中显示
    //需要edit是成员变量
    edit->setText(text);
}

//保存
void MainWindow::handle2()
{
    //1、添加 保存文件对话框
    QString path=QFileDialog::getSaveFileName(this,"保存文件","输入文件名");

    //2、打开文件
    QFile file(path);
    bool Isopen=file.open(QIODevice::WriteOnly);
    if(!Isopen)
    {
        qDebug()<<"保存文件时，文件打开失败";
        return;
    }

    //3、获取edit内容
    QString s=edit->text();
    //需要使用toUtf8，它可以把QString转为QByteArray类型
    file.write(s.toUtf8());

    //4、关闭文件
    file.close();
}

